#!/usr/bin/env node

import { crawlNovel } from './src/crawler.js';
import { saveNovelToFile } from './src/fileManager.js';
import path from 'path';
import { fileURLToPath } from 'url';
import fs from 'fs/promises';
import readline from 'readline';

// 获取当前文件的目录
const __dirname = path.dirname(fileURLToPath(import.meta.url));

// 创建readline接口
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// 确保novels目录存在
async function ensureNovelsDir() {
    const novelsDir = path.join(__dirname, 'novels');
    try {
        await fs.access(novelsDir);
    } catch (error) {
        // 目录不存在，创建它
        await fs.mkdir(novelsDir, { recursive: true });
        console.log(`创建目录: ${novelsDir}`);
    }
    return novelsDir;
}

// 提示用户输入
function prompt(question) {
    return new Promise((resolve) => {
        rl.question(question, (answer) => {
            resolve(answer);
        });
    });
}

// 主函数
async function main() {
    try {
        console.log('=== 小说网站爬虫工具 ===');
        console.log('此工具可以爬取多个小说网站的内容');
        console.log('支持的网站: 3yt.org, xbiquge.la 等');
        console.log('------------------------');

        // 获取用户输入
        const url = await prompt('请输入小说目录页URL: ');
        if (!url) {
            console.error('错误: URL不能为空');
            process.exit(1);
        }

        const startChapter = parseInt(await prompt('请输入起始章节 (默认: 1): ') || '1');
        const maxChapters = parseInt(await prompt('请输入最大章节数 (默认: 10): ') || '10');
        const delay = parseInt(await prompt('请输入爬取间隔(毫秒) (默认: 1000): ') || '1000');

        // 确保novels目录存在
        const novelsDir = await ensureNovelsDir();

        // 从URL中提取网站名称
        const urlObj = new URL(url);
        const siteName = urlObj.hostname.replace(/^www\./, '');

        // 生成输出文件名
        const timestamp = new Date().toISOString().replace(/[:.]/g, '-').substring(0, 19);
        const outputFile = path.join(novelsDir, `${siteName}-${timestamp}.txt`);

        console.log('------------------------');
        console.log(`开始爬取网站: ${siteName}`);
        console.log(`目录页URL: ${url}`);
        console.log(`输出文件: ${outputFile}`);
        console.log(`起始章节: ${startChapter}`);
        console.log(`最大章节数: ${maxChapters}`);
        console.log(`爬取间隔: ${delay}ms`);
        console.log('------------------------');

        // 爬取小说
        const novel = await crawlNovel(
            url,
            startChapter,
            maxChapters,
            delay
        );

        // 保存为文件
        await saveNovelToFile(novel, outputFile);

        console.log('------------------------');
        console.log('爬取完成！');
        console.log(`小说已保存到: ${outputFile}`);
        console.log(`标题: ${novel.title}`);
        console.log(`作者: ${novel.author}`);
        console.log(`章节数: ${novel.chapters.length}`);
    } catch (error) {
        console.error('爬取过程中出错:', error);
    } finally {
        rl.close();
    }
}

main();